1 Statistiques descriptives des données

1.1 Chargement des données et prise en main

1.1.1 Chargement

#implantation.dat <- readRDS("data/T0impl.Rds")
# fait.dat <- readRDS("data/T0New.Rds")
fait.dat <- read.csv("data/fait.txt", stringsAsFactors = FALSE) # besoin d'ajouter cela sinon il me garde tous les niveaux des facteurs
implantation.dat <- read.csv("data/implantation.txt")
# une exraction des relations
relation.dat <- fait.dat[fait.dat$caracNew == "Relations" ,]

Les données sont regroupées en deux tableaux :

  • “T0impl.Rds” contenant les implantations,
  • “T0New.Rds” contenant les faits.

C’est du second que l’on tire les relations.

1.1.2 Prise en main

# l'encoding semble en UTF8 et latin1 en fonction des colonnes/sources de la données
# la fonction Encoding permet de le specifier
# Encoding(fait.dat$usual_name) <- "latin1"
# Encoding(fait.dat$caracteristique) <- "latin1"
# Encoding(fait.dat$linked_implantation_name) <- "latin1"

Il faut specifier les encoding de 3 colonnes qui sont en “Latin1” alors que le reste semble être en UTF8. Au final knitr semble avoir un problème avec du “multi encoding”, j’ai donc fait un export/import le tout en UTF8.

Le tableau 1.1 reprend les nombre de données manquantes par variables. L’absence la plus importante est sur les dates (210 et 206 manquantes), puis sur la localisation (72 NA) avec lat/long et granularité et sur les diocése (11 NA).

# un apply, passer en df qui compte le nombre de NA par colonne 
relation_na.dat <- as.data.frame(apply(relation.dat, 2, function(x)length(x[is.na(x)])))
names(relation_na.dat) <- "Nbr_NA" # on renome puis on fait une deuxième var qui prend les rowname
relation_na.dat$variables <- rownames(relation_na.dat)
rownames(relation_na.dat) <- NULL

# une bidouille pour avoir un titre de tableau avec ref
cat("<tableau>",paste0("<caption>", "(#tab:presenceNa)", ' Nombre de données manquantes par variabes', "</caption>"),"</tableau>", sep ="\n")
Table 1.1: Nombre de données manquantes par variabes

DT::datatable(relation_na.dat) 
#knitr::kable(apply(relation.dat, 2, function(x)length(x[is.na(x)]))) # la version à l'arrache knitr

1.2 Description des relations

1.2.1 Modalité des relations

On obtient 2564 factoides avec une relation. Le tableau 1.2 répartit modalite en fonction des modAgreg. H de modAgreg ne correspond qu’aux associations de prière (147)) et X ne correspond qu’aux déplacements d’institution (29). A et D correspondent aux relations ascendantes et descendantes comprises entre trois couples :

  • À la collation de / Droit de patronage,
  • Appartient / à Possède et
  • Filiation ascendante directe / Filiation descendante.
knitr::kable(t(table(relation.dat$modAgreg, relation.dat$modalite)),
             caption = "Ventilation de modAgreg en fonction de modalite")
Table 1.2: Ventilation de modAgreg en fonction de modalite
A D H X
À la collation de 171 0 0 0
Appartient à 199 0 0 0
Association de prière 0 0 147 0
Déplacement d’institution 0 0 0 29
Droit de patronage 0 171 0 0
Filiation ascendante directe 824 0 0 0
Filiation descendante 0 824 0 0
Possède 0 199 0 0

1.2.2 Modalités et relations dans le temps

1.2.2.1 Exploration des données manquantes dans les dates

Il y a 210 et 206 valeurs manquantes au niveau des dates (cf. tableau 1.1). Ces valeurs manquantes sont consistantes dans les 6 champs de de description des dates : une absence de donnée en date_start_XX se retrouve en date_stop_XX et donc dans la fourchette produite.

Il y a cependant 4 exceptions, où l’on a une date_stop, correspondant à deux couples A/D :

NA_date <- relation.dat[is.na(relation.dat$date_start_min),]
knitr::kable(NA_date[!is.na(NA_date$date_stop_max),c(2:4,7,13)]) # attention ici une indexation sur num de colonnes
idfactoid idimplantation usual_name modAgreg date_stop_min
12113 43491 2399 Saint-Georges-en-Couzan, Saint-Georges (église dépendante) A 1790
12114 43492 1846 Lyon, Saint-Nizier D 1790
12200 43578 2448 Saint-Alban, Saint-Alban (église dépendante) A 1790
12242 43620 1646 Cerdon, Saint-Jean-Baptiste D 1790

En regardant la répartition des valeurs manquantes temporelles en fonction de modalite (1.3) on peut remarquer qu’un couple A/D n’est pas complet (60/61).

knitr::kable(table(NA_date$modalite), caption = "Répartition des NA temporelles dans les modalite")
Table 1.3: Répartition des NA temporelles dans les modalite
Var1 Freq
À la collation de 60
Appartient à 19
Association de prière 47
Droit de patronage 61
Filiation ascendante directe 2
Filiation descendante 2
Possède 19

Il me semble que c’est ce couple, Hélene peux tu regarder ? Je rajoute les valeurs ?

rbind(NA_date[NA_date$modAgreg == "D",][76,],
relation.dat[relation.dat$idimplantation == 2483,]) # attention c'est une indexation par rapport à un emplacement 
##           X idfactoid idimplantation
## 12293 12293     43672           2131
## 12292 12292     43671           2483
##                                                        usual_name
## 12293                          Charleville-Mézières, Saint-Pierre
## 12292 Les-Mazures, Saint-Remi-Sainte-Gertrude (église dépendante)
##              caracteristique  caracNew modAgreg           modalite
## 12293 Relations - Dépendance Relations        D Droit de patronage
## 12292 Relations - Dépendance Relations        A  À la collation de
##       fklinked_implantation
## 12293                  2483
## 12292                  2131
##                                          linked_implantation_name
## 12293 Les-Mazures, Saint-Remi-Sainte-Gertrude (église dépendante)
## 12292                          Charleville-Mézières, Saint-Pierre
##       date_start_min date_start_max date_stop_min date_stop_max      lat
## 12293             NA             NA            NA            NA 49.76208
## 12292           1190           1190          1800          1800 49.88855
##            lng location_granularity Diocese date_startC date_stopC
## 12293 4.726096                  rue   Reims          NA         NA
## 12292 4.626041              precise   Reims        1190       1800
##       DureeFact
## 12293        NA
## 12292       610

On peut produire une carte rapide des valeurs manquantes pour les dates (promis j’en fait une belle semi-interactive sous mapview plus tard, je suis allez au plus vite ce vendredi après midi). On en a un gros cluster autour de la region lyonaise et un autre autour de Charleville-Mézières. Est ce que cela suit une logique par rapport au données ?

plot(st_geometry(diocese.shp))
plot(st_geometry(implantation.shp), add =  T, col = "lightgrey", pch = 16, cex = .5)
plot(st_geometry(NA_date.shp), add = T, col = "red", pch = 16, cex = .5)
legend("topleft", legend=c("Avec dates", "Sans date"), pch = 16,
       col=c("lightgrey", "red"))

1.2.2.2 Dates et durées pour les relations

Je n’ai gardé pas gardé les relations ascendantes pour les analyses suivantes car elle sont identiques.

Il n’y a que trois cas d’ecarts importants entre date_start_min et date_start_man representé par la figure 1.1. Les données manquantes ne sont pas prises en compte. date_stop_min et date_stop_max sont identiques pour les relations.

# c'est du js
f <- list(
  family = "Courier New, monospace",
  size = 18,
  color = "#7f7f7f"
)
x <- list(
  title = "date_start_min",
  titlefont = f
)
y <- list(
  title = "date_start_max",
  titlefont = f
)
# j'enleve les doublons A/D et NA
relation_sans_A.dat <- relation.dat[relation.dat$modAgreg != "A",]
relation_sans_A.dat <- relation_sans_A.dat[!is.na(relation_sans_A.dat$date_startC),]
# il ignore les NA
plot_ly(relation_sans_A.dat, x = relation_sans_A.dat$date_start_min, y = relation_sans_A.dat$date_start_max, type="scatter", # on def X et y
        # on fait un text
        text = paste(relation_sans_A.dat$usual_name, relation_sans_A.dat$modalite, relation_sans_A.dat$linked_implantation, sep = "\n")) %>% 
layout(xaxis = x, yaxis = y)

Figure 1.1: Ecarts entre date_start_min et date_start_max

La figure 1.2 regroupe les répartitions des dates (par tranches de 50 ans) de debut et fin des modes d’agrégations. Avec ce grain, assez grossier, on peut noter un premier pic dans les dates de relation autour 1100 pour les relations A/D (penser à detailler cette agrégation), suivit d’un second pic de debut de relation autour de 1300 qui n’est rattrapé en fin de relation qu’en 1750-1800. Il y a deux pics de dates de début/fin pour les associations de prières (H) le premier autour de 1250-1300 et le second autour de 1400 pour le debut puis 1450 pour la fin.

# on va utiliser ggplot2 donc il faut que cela soit en tidy, au moins un peu
relation_sans_NA_tidy.dat <- gather(relation_sans_A.dat, "date_startC", "date_stopC", key = "debut_fin", value = "date")
# date de début et de fin des relation par modAgreg
ggplot(relation_sans_NA_tidy.dat, aes(date, color = debut_fin)) +
    geom_freqpoly(binwidth = 50) + 
    facet_wrap(~modAgreg) +
    labs( x = "date (50 ans)" , y = "décompte" ) +
    theme_bw()
Répartition des dates (début/fin) par tranches de 50 ans en fonction des modes d’agrégation

Figure 1.2: Répartition des dates (début/fin) par tranches de 50 ans en fonction des modes d’agrégation

2 Premiers graphes sur les relations

2.1 En prenant le tout

library(igraph)
relation <- relation.dat[relation.dat$modAgreg != "A",] # on enleve les doublons
# on ne garde que les noms
relation <- subset(relation, select =  c("usual_name", "linked_implantation_name"))
# objet de graphs
graph_ensemble <- graph.edgelist(as.matrix(relation), directed = FALSE)

Attention igraph masque et utilise des fonctions de dplyr et base comme as_data_frame, groups, union.

On obtient un graphe peut lisible avec 1370 liens et 1232 noeuds.